//命名空间: cyh对象
var cyh = {};
var baseUrl = '/isdunews/';
//计时器
cyh.t=null, cyh.t1 = null, cyh.t2 = null;

//容纳会重复使用的DOM元素
cyh.domObjs = {
    main: document.getElementById('main'),
    inner: document.getElementById('main-inner'),
    singleCol: document.getElementById('wtf-single-col'),
    cols: [],
    sections: [], temp: []
};
(function(){
    for(var i=0;i<4;i++){
        cyh.domObjs.cols[i] =
            document.getElementById('wtf-col'+(i));
    };
    
    var a = cyh.domObjs.singleCol.getElementsByTagName('section');
    var l = a.length;
    for(var i=0;i<l;i++) {
        cyh.domObjs.sections[i] = a[i];
    }
})();

//容纳需要重复使用的数据或状态
cyh.vars = {
    state: 1,
    scrollTop: document.documentElement.scrollTop || document.body.scrollTop,
    scrollTo: document.documentElement.scrollTop || document.body.scrollTop,
    resizing: false,
    
    loading: false, loadFinish: false,
    ajax: {
        keyword: '',
        number: '',
        source: 0,
        picture: 0,
        date: 0,
        type: 1
    },
    source: []
};
if($('#tab-wrap').find('a').eq(1).hasClass('active')) {
    cyh.vars.ajax.type = 2;
}
for(var i=0;i<8;i++) {
    cyh.vars.source[i] = false;
}

//初始化，启动各个功能
cyh.init = function() {
    $(window).on('resize',cyh.resize);
    $(window).on('scroll',cyh.scroll);
    cyh.resize();
    cyh.ajax();
};


/********************
*****自适应功能
********************/
//resize事件响应函数
cyh.resize = function() {
    var s = cyh.getState();
    
    if (cyh.vars.state == s) { return };
    
    if( s>1 || cyh.vars.state >= 1 )
        { cyh.refresh(s) };
    
    cyh.setState(s);
    cyh.vars.state = s;
}
//通过main元素宽度返回自适应布局代码
cyh.getState = function() {
    var Width = cyh.domObjs.main.clientWidth;
    
    if(Width>=1440) return 4;
    if(Width>=1120) return 3;
    if(Width>=800) return 2;
    if(Width>=600) return 0;
    if(Width<=360) return -3;
    if(Width<=500) return -2;
    return -1;
}
//通过自适应布局代码设定main元素的className
cyh.setState = function(s) {
    if(s>1){
        cyh.domObjs.main.className='col'+s;
        cyh.domObjs.inner.style.width=s * 320 +'px';
    } else {
        cyh.domObjs.main.className='col1';
        cyh.domObjs.inner.style.width='100%';
        if(s==0) {
            cyh.domObjs.main.className+=' min600'
        } else if(s==-2) {
            cyh.domObjs.main.className+=' max500'
        } else if(s==-3){
            cyh.domObjs.main.className+=' max500 max360'
        }
    }
}
//布局列数改变时调整section卡片的dom位置
cyh.refresh = function(s) {
    clearTimeout(cyh.t);
    if(!cyh.vars.resizing) {
        cyh.vars.scrollTo = document.documentElement.scrollTop || document.body.scrollTop;
    }
    
    var l = cyh.domObjs.sections.length,
        n = 0;
    for(var i=0;i<l;i++) {
        var sec=cyh.domObjs.sections[i];
        var par=sec.parentNode;
        if(par) {par.removeChild(sec);}
    }
    if(l == 0) {
        for(var i=0;i<4;i++) {
            cyh.domObjs.cols[i].innerHTML = '';
        }
        cyh.domObjs.singleCol.innerHTML = '';
        return;
    };
    //多列情况
    function add_1() {
        //判断下次添加进哪一列
        var col_eq = s-1;
        for (var i=s-1;i;i--) {
            if (cyh.domObjs.cols[col_eq].clientHeight >= cyh.domObjs.cols[col_eq-1].clientHeight)
                {col_eq = i-1;}
        }
        
        $(cyh.domObjs.sections[n]).addClass('hide');
        if(n) {$(cyh.domObjs.sections[n-1]).removeClass('hide');}
        //添加section
        cyh.domObjs.cols[col_eq].appendChild(cyh.domObjs.sections[n]);
        //进行下一次添加
        if (++n<l) {
            cyh.t = setTimeout(add_1,60)
        } else {
            cyh.t = setTimeout(function(){
                $(cyh.domObjs.sections[n-1]).removeClass('hide');
                $(window).scrollTop(cyh.vars.scrollTo);
                cyh.vars.resizing = false;
                cyh.vars.loading=false;
            },60);
        }
    }
    //单列情况
    function add_2() {
        $(cyh.domObjs.sections[n]).addClass('hide');
        if(n) {$(cyh.domObjs.sections[n-1]).removeClass('hide');}
        cyh.domObjs.singleCol.appendChild(cyh.domObjs.sections[n]);
        //进行下一次添加
        if (++n<l) {
            cyh.t = setTimeout(add_2,60)
        } else {
            cyh.t = setTimeout(function(){
                $(cyh.domObjs.sections[n-1]).removeClass('hide');
                $(window).scrollTop(cyh.vars.scrollTo);
                cyh.vars.resizing = false;
                cyh.vars.loading=false;
            },60);
        }
    }
    
    if (s>1) {
        add_1();
        cyh.vars.resizing = true;
    } else {
        add_2();
        cyh.vars.resizing = true;
    }
}
/********************
自适应功能*****
********************/


/********************
*****滚动加载功能
********************/
//scroll事件响应函数
cyh.scroll = function() {
    var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
    if(!cyh.vars.loadFinish
       && !cyh.vars.loading
       && scrollTop>cyh.vars.scrollTop) {
        cyh.appendDetect(scrollTop);
    }
    cyh.vars.scrollTop = scrollTop;
    
}
//检测是否进行ajax
cyh.appendDetect = function(scrollTop) {
    if ( (cyh.domObjs.inner.offsetTop + cyh.domObjs.inner.clientHeight)
        < scrollTop + (window.innerHeight || document.documentElement.clientHeight) )
    {
        cyh.ajax();
    }
}
//进行ajax
cyh.ajax = function() {
    if (cyh.vars.loading === true) { return };
    cyh.vars.loading = true;
    $('#loading').addClass('loading');
    $('#reload').hide();
    $('#loadInfo').show().html('加载中');
    $.ajax({
        url: 'SearchArticlesServlet',
        type: 'POST',
        timeout: 20000,
        data: cyh.vars.ajax,
        complete: function(){
            setTimeout(function(){
                $('#loading').removeClass('loading');
            },1000);
        },
        success: function(data){
            if(cyh.jsonToHTML(data)){
                setTimeout(function(){
                    cyh.append(cyh.vars.state);
                    $('#loadInfo').hide();
                },1000);
            } else {
                setTimeout(function(){
                    $('#loadInfo').html('找不到更多文章了');
                    cyh.vars.loading=false;
                },1000);
            }
        },
        error: function() {
            setTimeout(function(){
                $('#loadInfo').html('加载失败了 @_@，要不再试试');
                cyh.vars.loading=false;
            },1000);
            $('#reload').show();
        }
    });
}
//重试按钮
$('#reload').click(cyh.ajax);
//将获取的json转换成dom对象
cyh.jsonToHTML = function(json){
    var jsonObj=null; cyh.domObjs.temp=[];
    try{
        jsonObj=JSON.parse(json);
    }catch(e){
        alert('json解析错误')
    }
    
    if(jsonObj){
        if(jsonObj.list && jsonObj.list.length){
            var len=jsonObj.list.length,id,date;
//            id = jsonObj.list[0].id;
            for(var i=0;i<len;i++){
                if(id > jsonObj.list[i].id) { id = jsonObj.list[i].id };
                
                var section=document.createElement('section');
                var a=document.createElement('a');section.appendChild(a);a.setAttribute('href',baseUrl+'ArticleServlet?articleId='+jsonObj.list[i].id);
                var sectInner=document.createElement('div');a.appendChild(sectInner);
                
                var titleBox=document.createElement('div');sectInner.appendChild(titleBox);titleBox.className='title-box';
                var h2=document.createElement('h2');titleBox.appendChild(h2);
                var text=document.createTextNode(jsonObj.list[i].title);h2.appendChild(text);
                
                if(jsonObj.list[i].img && jsonObj.list[i].img.length) {
                    var imgBox=document.createElement('div');sectInner.appendChild(imgBox);imgBox.className='img-box';
                    var imgWrap=document.createElement('div');imgBox.appendChild(imgWrap);imgWrap.className='img-wrap';
                    var imgMWrap=document.createElement('div');imgWrap.appendChild(imgMWrap);imgMWrap.className='img-m-wrap';
                    if(jsonObj.list[i].img.length==4) {
                        sectInner.className='sect-inner sect-multi';
                        for(var j=0;j<4;j++){
                            var img=document.createElement('img');imgMWrap.appendChild(img);img.setAttribute('src',jsonObj.list[i].img[j])
                        }
                    }else{
                        sectInner.className='sect-inner sect-img';
                        var img=document.createElement('img');imgMWrap.appendChild(img);img.setAttribute('src',jsonObj.list[i].img[0])
                    }
                }else{
                    sectInner.className='sect-inner sect-text';
                }
                
                var infoBox=document.createElement('div');sectInner.appendChild(infoBox);infoBox.className='info-box';
                var p=document.createElement('p');infoBox.appendChild(p);
                var info=jsonObj.list[i].info.split('|');var infoDate=new Date(parseInt(info[1])*1000);
				date = info[1];
                info[1]=infoDate.getFullYear()+'年'+(infoDate.getMonth()+1)+'月'+infoDate.getDate()+'日';
                jsonObj.list[i].info=info[0]+'|'+info[1];
                var text=document.createTextNode(jsonObj.list[i].info);p.appendChild(text);
                var p=document.createElement('p');infoBox.appendChild(p);
                if(jsonObj.list[i].content){
                    var p=document.createElement('p');infoBox.appendChild(p);
                    var text=document.createTextNode(jsonObj.list[i].content.slice(0,60));p.appendChild(text);
                }
                
                cyh.domObjs.sections.push(section);cyh.domObjs.temp.push(section);
            }
            cyh.vars.ajax.number=date;
            return true;
        }
    }
};
//将ajax获取的数据添加进HTML,和cyh.refresh相似
cyh.append = function(s) {
    clearTimeout(cyh.t);
    
    var l = cyh.domObjs.temp.length,
        n = 0;
    
    if(l == 0) {return};
    //多列情况
    function add_1() {
        //判断下次添加进哪一列
        var col_eq = s-1;
        for (var i=s-1;i;i--) {
            if (cyh.domObjs.cols[col_eq].clientHeight >= cyh.domObjs.cols[col_eq-1].clientHeight)
                {col_eq = i-1;}
        }
        
        $(cyh.domObjs.temp[n]).addClass('hide');
        if(n) {$(cyh.domObjs.temp[n-1]).removeClass('hide');}
        //添加section
        cyh.domObjs.cols[col_eq].appendChild(cyh.domObjs.temp[n]);
        //进行下一次添加
        if (++n<l) {
            cyh.t = setTimeout(add_1,60)
        } else {
            cyh.t = setTimeout(function(){
                $(cyh.domObjs.temp[n-1]).removeClass('hide');
                cyh.vars.loading=false;
            },60);
        }
    }
    //单列情况
    function add_2() {
        $(cyh.domObjs.temp[n]).addClass('hide');
        if(n) {$(cyh.domObjs.temp[n-1]).removeClass('hide');}
        cyh.domObjs.singleCol.appendChild(cyh.domObjs.temp[n]);
        //进行下一次添加
        if (++n<l) {
            cyh.t = setTimeout(add_2,60)
        } else {
            cyh.t = setTimeout(function(){
                $(cyh.domObjs.temp[n-1]).removeClass('hide');
                cyh.vars.loading=false;
            },60);
        }
    }
    
    if (s>1) {
        add_1();
    } else {
        add_2();
    }
}
/********************
滚动加载功能*****
********************/

//搜索功能
;(function(){
    $('#h-input').focus(function(){
        if ($(this).val()=='搜索资讯') $(this).val('');
    }).blur(function(){
        if ($(this).val()=='') $(this).val('搜索资讯');
    });
    
    $('#i-search2').click(function(){
        $('header').addClass('searching');
    });
    $('#i-back').click(function(){
        $('header').removeClass('searching');
    });
    
    var initSearch=location.search.substr(1).split("&"),initData={};
    for(var i=0;i<initSearch.length;i++){
        initData[(initSearch[i].split('='))[0]]=(initSearch[i].split('='))[1]
    }
    if(initData.keyword){
        cyh.vars.ajax.keyword=decodeURI(initData.keyword);$('#h-input').val(cyh.vars.ajax.keyword);
    }
    
    $('#i-search1').click(function(){
        $('#h-form').submit();
    });
    $('#h-form').submit(function(){
        var key=$('#h-input').val();
        if(key=='搜索资讯') key='';
        if(!key) {
            cyh.vars.ajax.keyword=key;
        }
    });
})();

//筛选功能
;(function(){
    //添加模拟控件
    $('.select-wrap').append('<div class="select-show"><div class="s-text"></div><div class="s-arr"></div></div>').prepend('<div class="s-select"></div>');
    //模拟控件连接到select上
    (function(){
        var $wrap=$('.select-wrap');
        var sNum=$wrap.length;
        var $sS=$wrap.find('.s-select');
        for(var i=0;i<sNum;i++){
            $wrap.eq(i).find('.s-text').html($wrap.eq(i).find('option:selected').html());
            var $ops=$wrap.eq(i).find('option');var oNum=$ops.length;
            for(var j=0;j<oNum;j++){
                $sS.eq(i).append('<div>'+ $ops.eq(j).html() +'</div>')
            }
            (function(i){
                var $ops=$wrap.eq(i).find('option');
                $wrap.eq(i).find('.select-show').click(function(){
                    $wrap.eq(i).addClass('showing').siblings().removeClass('showing');
                });
                $wrap.eq(i).on('click','.s-select div',function(){
                    $wrap.eq(i).removeClass('showing');
                    $wrap.eq(i).find('select').val($ops.eq($(this).index()).val());
                    $wrap.eq(i).find('.s-text').html($ops.eq($(this).index()).html());
                })
            })(i);
        }
    })();
    
    //筛选与取消筛选
    $('#filter-start').click(function(){
        var data=cyh.vars.ajax;
        var $sel=$('select');var $sel_len=$sel.length;
        for(var i=0;i<$sel_len;i++){
            data[($sel.eq(i).attr('name'))]=$sel.eq(i).val();
        };
		data.number='';
        cyh.domObjs.sections=[];
        cyh.refresh();
        cyh.ajax();
    });
    $('#filter-stop').click(function(){
        var data=cyh.vars.ajax;
        var $sel=$('select');var $sel_len=$sel.length;
        for(var i=0;i<$sel_len;i++){
            data[($sel.eq(i).attr('name'))]="";
        };
		data.number='';
        cyh.domObjs.sections=[];
        cyh.refresh();
        cyh.ajax();
    });
    $('#filter-stop').click();
    
    //导航栏的两个按钮
    (function(){
        var s1=false,s2=false;
        var $main=$('main');
        var $menu=$('#menu'),$filter=$('#filter');
        function close1(){
            s1=false;
            $main.animate({'margin-left':'0'},400,cyh.resize);
            $menu.animate({'left':'-300px'},400);
            $('#shadow1').removeClass('covering');
            $('#i-menu').removeClass('active');
            $('#i-filter').removeClass('active');
        }
        function close2(){
            s2=false;
            $main.animate({'margin-right':'0'},400,cyh.resize);
            $filter.animate({'right':'-340px'},400);
            $('#shadow2').removeClass('covering');
            $('#i-menu').removeClass('active');
            $('#i-filter').removeClass('active');
        }
        $('#i-menu').click(function(){
            if(s1){
                close1();
            }else{
                s1=true;s2=false;
                $('#i-menu').addClass('active');$('#i-filter').removeClass('active');
                if(document.documentElement.clientWidth>800)
                    $main.animate({'margin-left':'280px','margin-right':'0'},400,cyh.resize);
                $menu.animate({'left':'0'},400);
                $filter.animate({'right':'-340px'},400);
                $('#shadow1').addClass('covering'),$('#shadow2').removeClass('covering');
            }
        });
        $('#i-filter').click(function(){
            if(s2){
                close2();
            }else{
                s2=true;s1=false;
                $('#i-menu').removeClass('active');$('#i-filter').addClass('active');
                if(document.documentElement.clientWidth>800)
                    $main.animate({'margin-right':'320px','margin-left':'0'},400,cyh.resize);
                $filter.animate({'right':'0'},400);
                $menu.animate({'left':'-300px'},400);
                $('#shadow2').addClass('covering'),$('#shadow1').removeClass('covering');
            }
        });
        $('#i-back2').click(close1);$('#shadow1').click(close1);$('#shadow2').click(close2);
        $('main').click(function(){close1();close2();});
    })();
})();

//选择来源
;if(document.getElementById('source')){(function(){
    var s1=false;
    $('#i-source').click(function(){
        if(s1) {
            $(this).removeClass('active');
            $('#source').stop().slideUp(300);s1=false;
        } else {
            $(this).addClass('active');
            $('#source').stop().slideDown(300),s1=true;
        }
    });
    var box = document.getElementById('source');
    var texts=['本科生院','青春山大','小树林日报','山大视点','学生就业指导中心','学生在线','学工部','国际交流事务部']
    for(var i=0;i<2;i++) {
        var row=document.createElement('span');
        row.className = 'sour-b';
        box.appendChild(row);
        for(var j=0;j<4;j++) {
            var cell=document.createElement('span'),btn=document.createElement('span'),text=document.createElement('span');
            cell.appendChild(btn);cell.appendChild(text);
            cell.className='sour-c';text.innerHTML = texts[i*4+j];
            btn.className = 'sour sour-d';btn.id = 'sour-'+(i*4+j+1);
            var cover=document.createElement('span');
            cover.className = 'sour sour-9';
            btn.appendChild(cover);row.appendChild(cell);
        }
    }
    var selectAll=document.createElement('div');selectAll.appendChild(document.createTextNode('全选'));
    var confirm=document.createElement('div');confirm.appendChild(document.createTextNode('确认'));
    var ctr=document.createElement('div');ctr.appendChild(selectAll);ctr.appendChild(confirm);ctr.className = 'sour-ctr';
    row.appendChild(ctr);
    
    function changeSource(){
        var arr=[];
        for(var i=0;i<8;i++){
            if(cyh.vars.source[i]){
                arr.push(i+1);
            }
        }
        cyh.vars.ajax.source=arr.join('/');
        if(cyh.vars.ajax.source==='1/2/3/4/5/6/7/8') {
            cyh.vars.ajax.source = '0';
        }
        $('#i-source').removeClass('sour-f');
        for(var i=0;i<8;i++){
            if(cyh.vars.source[i] != cyh.vars.source[0]){
                $('#i-source').addClass('sour-f');
            }
        }
        cyh.vars.ajax.number='';
        cyh.domObjs.sections=[];
        cyh.refresh();
        cyh.ajax();
    }
    
    function sourceHandler(){
        if(!cyh.vars.loading){
            var $this=$(this);
            var eq = $('.sour-d').index($this);
            if($this.hasClass('show')){
                $this.removeClass('show');
                cyh.vars.source[eq]=false;
            } else {
                $this.addClass('show');
                cyh.vars.source[eq]=true;
            }
        }
    }
    $('#source').on('click','.sour-d',sourceHandler);
    $(selectAll).click(function(){
        var btns=$('.sour-d');
        for(var i=0;i<8;i++){
            if(!cyh.vars.source[i]){
                btns.eq(i).click();
            }
        }
    });
    $(confirm).click(changeSource);
    
})()};

$('#banX').click(function(){
    $('#banner').fadeOut(500);
});
$('#scroll').click(function(){
    $('html,body').animate({'scrollTop':'0px'},300);
});

cyh.init();